package com.superman.supermarket.client.widget.input;

import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.superman.mvpframe.client.event.ToastEvent;
import com.superman.mvpframe.client.gin.XGinjector;

/**
 * 输入控件基础类
 * 
 * @author superman
 * @version 2018年7月18日下午10:02:23
 */
public abstract class InputBase extends Composite {

	interface InputBaseUiBinder extends UiBinder<Widget, InputBase> {
	}

	private static InputBaseUiBinder uiBinder = GWT.create(InputBaseUiBinder.class);

	@UiField
	protected TextBox inputbase;
	@UiField
	protected HTML namehtml;

	/**
	 * 构造方法
	 * 
	 * @author superman
	 * @version 2018年7月18日 下午10:02:25
	 */
	public InputBase() {
		initWidget(uiBinder.createAndBindUi(this));
	}

	/**
	 * 返回错误提示
	 * 
	 * @author superman
	 * @version 2018年7月18日 下午10:18:08
	 * @return 错误提示
	 */
	public abstract String getErrMsg();

	/**
	 * @author superman
	 * @version 2018年8月20日 下午9:29:23
	 * @return
	 */
	public TextBox getInputbase() {
		return inputbase;
	}

	/**
	 * 返回输入框中的值
	 * 
	 * @author superman
	 * @version 2018年7月18日 下午10:10:20
	 * @return value
	 */
	public String getValue() {
		return this.inputbase.getValue().trim();
	}

	/**
	 * 设置名称的文字.可用于uibinder
	 * 
	 * @author superman
	 * @version 2018年7月18日 下午10:08:11
	 * @param name
	 */
	public void setName(String name) {
		this.namehtml.setText(name);
	}

	/**
	 * 设置输入提示,可用于uibinder
	 * 
	 * @author superman
	 * @version 2018年7月18日 下午10:08:14
	 * @param placeHolder
	 */
	public void setPlaceHolder(String placeHolder) {
		this.inputbase.getElement().setAttribute("placeHolder", placeHolder);
	}

	/**
	 * 设置是否只读
	 * 
	 * @author superman
	 * @version 2018年8月20日 下午9:25:51
	 * @param readOnly
	 */
	public void setReadOnly(boolean readOnly) {
		this.inputbase.setReadOnly(readOnly);
	}

	/**
	 * 设置输入框中的值
	 * 
	 * @author superman
	 * @version 2018年7月18日 下午10:10:23
	 * @param value
	 */
	public void setValue(String value) {
		this.inputbase.setText(value);

	}

	protected abstract boolean valid();

	/**
	 * 输入合法性检查
	 * 
	 * @author superman
	 * @version 2018年7月18日 下午10:21:21
	 * @return true合法,false不合法
	 */
	public boolean validInput() {
		if (valid()) {
			return true;
		} else {
			XGinjector.INSTANCE.getEventBus().fireEvent(new ToastEvent(getErrMsg()));
			return false;
		}
	}

}
